

public class Simulation implements Runnable {

	/**
	 * Hilfsvariablen, damit Simulation unterbrochen und weitergefuehrt werden kann
	 */
	private boolean runs1,runs2;
	
	/**
	 * der eigentliche Simulationsthread
	 */
	private Thread simThread;
	/**
	 * die AntSimulation auf die sich dieses Runnable bezieht
	 */
	private AntSimulation antSim;
	
	/**
	 * Konstruktor
	 * @param as zugehoerige AntSimulation
	 */
	public Simulation(AntSimulation as){
		super();
		antSim=as;
		simThread=null;
		runs1=true;
		runs2=true;
	}//constructor
	
	
	/**
	 * run-Methode -> simuliert
	 */
	public  void run() {
		System.out.println(">>>simulation started");
			
					/*AntSimulation.initialzeSimulation();*/
		while(runs1){	
			
			while(runs2){
						try {
						//	System.out.println("Ameise berechnen beginnt bei :j "+antSim.getStat_J());
							antSim.simulate(antSim.getStat_J());
						} catch (InterruptedException e) {
						// TODO Auto-generated catch block
							System.out.println(">>>simulation on hold");
							break;
						}
			}
			try {
				Thread.sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println(">>>simualtion ended");
		
	}//run()
	
	/**
	 * ruft Startmethode des Simualtionsthreads auf
	 */
	public synchronized  void start(){
		if(simThread==null){
			simThread=new Thread(this);
			simThread.start();
		}
	}
	
	/**
	 * startet eine neue Simulation und beendet ggf. eine alte
	 */
	public synchronized void start_new_simulation(){
		//this.interrupt_simulation();
		System.out.println(">>>try to start new simulation");
		this.exit_Simulation();
		antSim.initialzeSimulation();
	//	antSim.setStat_j(0);
			this.runs1=true;
			this.runs2=true;
			this.start();
	}
	
	/**
	 * haelt die Simulaiton an
	 */
	public synchronized void interrupt_simulation(){
		runs2=false;
			simThread.interrupt();	
	}
	
	/**
	 * fuehrt de Simulation weiter
	 */
	public  synchronized void continue_simulation(){
		System.out.println(">>>continue simulation");
		runs2=true;
		//simThread.start();
		
		//continues
		/*this.exit_Simulation();
		AntSimulation.stat_i=0;
		AntSimulation.stat_j=0;
		this.runs1=true;
		runs2=true;
		this.start();*/
		
	}
	
	/**
	 * beendet die Simualtion
	 */
	public synchronized void exit_Simulation(){
		this.runs1=false;
		this.runs2=false;
		if(simThread!=null)
				simThread=null;
		System.out.println(">>>exit simulation");
	}
}//class
